#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//转移表
/*int add(int x, int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int mul(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return x / y;
}
int main()
{
	int input = 0;
	int ret = 0;
	int(*p[5])(int x, int y) = { 0,add,sub,mul,div };
	do
	{
		printf("***********************\n");
		printf("**** 1.add   2.sub ****\n");
		printf("**** 3.mul   4.div ****\n");
		printf("**** 0.exit        ****\n");
		printf("***********************\n");
		printf("请选择\n");
		scanf("%d", &input);
		if (input >= 1 && input <= 4)
		{
			int a, b = 0;
			printf("请输入两个操作数\n");
			scanf("%d %d", &a, &b);
			ret = (*p[input])(a, b);
			printf("%d\n", ret);
		}
		else if (input == 0)
		{
			printf("退出计算器\n");
		}
		else
		{
			printf("输入错误，重新输入\n");
		}
	} while (input);
	return 0;
}*/


//单身狗2
//一个数组中只有两个数字是出现一次，其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字
//例如：
//有数组的元素是：1，2，3，4，5，1，2，3，4，6
//只有5和6只出现1次，要找出5和6.
int find_single_dog(int arr[], int sz)
{
	int ret = 0;
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}
	return ret;
}
int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = find_single_dog(arr, sz);
	int count = 0;
	while (1)
	{
		if (ret & 1 == 1)
		{
			break;
		}
		else
		{
			ret = (ret >> 1);
			count++;
		}
	}
	int i = 0;
	int dog1 = 0;
	int dog2 = 0;
	for (i = 0;i < sz;i++)
	{
		if ((arr[i]>>count) & 1 == 1)
		{
			dog1 ^= arr[i];
		}
		else
		{
			dog2 ^= arr[i];
		}
	}
	printf("%d %d", dog1, dog2);
	return 0;
}



//qsort使用
int int_cmp(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);
}
int main()
{
	int arr[] = { 1,3,5,6,8,9,4,3,5 };
	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), int_cmp);
	int i = 0;
	for (i = 0;i < sizeof(arr) / sizeof(arr[0]);i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}